package net.suncaper.mvc.mapper;

import net.suncaper.mvc.model.domain.User;

/**
 * User表数据库访问接口
 */
public interface UserMapper {
    /**
     * 新增用户信息
     *
     * @param user 用户信息
     * @return 新增结果
     */
    boolean insertUser(User user);

    /**
     * 根据用户ID查询用户信息
     *
     * @param userId 用户ID
     * @return 用户信息
     */
    User selectUserById(String userId);

    /**
     * 根据邮箱查询用户信息
     *
     * @param email 邮箱
     * @return 用户信息
     */
    User selectUserByEmail(String email);

    /**
     * 查询所有用户信息
     *
     * @return 用户列表
     */
    java.util.List<User> selectAllUsers();

    /**
     * 更新用户信息
     *
     * @param user 用户信息
     * @return 更新结果
     */
    boolean updateUser(User user);

    /**
     * 删除用户信息
     *
     * @param userId 用户ID
     * @return 删除结果
     */
    boolean deleteUser(String userId);

    /**
     * 判断邮箱是否已经存在
     *
     * @param email 邮箱
     * @return 邮箱是否存在
     */
    boolean isEmailExists(String email);
    
    /**
     * 新增用户角色关联
     *
     * @param userId 用户ID
     * @param roleId 角色ID
     * @param hotelName 酒店名称（可为空）
     * @return 新增结果
     */
    boolean insertUserRole(String userId, Integer roleId, String hotelName);

    /**
     * 根据用户ID删除用户角色关联
     *
     * @param userId 用户ID
     * @return 删除结果
     */
    boolean deleteUserRoleByUserId(String userId);

    /**
     * 查询用户是否已有角色关联
     *
     * @param userId 用户ID
     * @return 是否存在关联
     */
    boolean isUserRoleExists(String userId);

    /**
     * 更新用户角色关联的酒店名称
     *
     * @param userId 用户ID
     * @param hotelName 酒店名称
     * @return 更新结果
     */
    boolean updateHotelNameForUser(String userId, String hotelName);

    /**
     * 根据用户ID查询用户角色信息
     *
     * @param userId 用户ID
     * @return 角色ID
     */
    Integer selectRoleIdByUserId(String userId);

    /**
     * 根据用户ID查询用户关联的酒店名称
     *
     * @param userId 用户ID
     * @return 酒店名称
     */
    String selectHotelNameByUserId(String userId);
}    